

// leetcode 207. 课程表
//class Solution {
//    public boolean canFinish(int numCourses, int[][] prerequisites) {
//        // 记录课程的入度
//        // 将入度为 0 的课程放入队列(已解锁)
//        // 遍历队列，将课程指向的课程数组入度减-1
//        // 如果数组元素入度为0，则添加到队列中
//        // 最后遍历数组，如果入度不为 0，则返回 false
//        int[] courses = new int[numCourses];
//        Queue<Integer> queue = new LinkedList<>();
//        Map<Integer, List<Integer>> hash = new HashMap<>();
//        for (int i = 0; i < prerequisites.length; i++) {
//            int[] arr = prerequisites[i];
//            int course = arr[0];
//            int condiction = arr[1];
//            courses[course]++;
//            List<Integer> needUnclock = hash.getOrDefault(condiction, new ArrayList<Integer>());
//            needUnclock.add(course);
//            hash.put(condiction, needUnclock);
//        }
//
//        for (int i = 0; i < courses.length; i++) {
//            if (courses[i] == 0) {
//                queue.offer(i);
//            }
//        }
//
//        while (!queue.isEmpty()) {
//            int top = queue.poll();
//            List<Integer> needUnclock = hash.getOrDefault(top, new ArrayList<>());
//            for (int i = 0; i < needUnclock.size(); i++) {
//                int course = needUnclock.get(i);
//                courses[course]--;
//                if (courses[course] == 0) {
//                    queue.offer(course);
//                }
//            }
//        }
//
//        for (int i = 0; i < courses.length; i++) {
//            if (courses[i] != 0) {
//                return false;
//            }
//        }
//        return true;
//
//    }
//}